package br.unesp.demac.bcc.soo.clarus.dao;

import br.unesp.demac.bcc.soo.clarus.bean.Usuario;
import br.unesp.demac.bcc.soo.clarus.util.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Evaldo
 */
public class UsuarioDAOImp implements UsuarioDAO {

    /**
     * Salva dados do usário
     * @param usu Usuário a ser inserido
     * @return idUsuario
     * @throws SQLException Execeção SQL
     */
    public int salvarUsuario(Connection conn, Usuario usu) {
        int idUsuario = -1;

        final String query = "INSERT INTO usuario (nome) VALUES (?);";
        PreparedStatement pstmt = null;
        ResultSet res = null;

        if (conn != null) {
            try {
                //inserindo dados em Usuario
                pstmt = conn.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
                pstmt.setString(1, usu.getNome());
                pstmt.executeUpdate();
                res = pstmt.getGeneratedKeys();

                if (res.next()) {
                    idUsuario = res.getInt(1);
                }

            } catch (SQLException ex) {
                System.out.println("Erro ao salvar usuário: " + ex.getMessage());
            } finally {
                FabricaConexao.fechar(pstmt);
            }
        }

        return idUsuario;
    }

    public Usuario getUsuarioById(Connection conn, int idUsuario) {

        final String query = "SELECT idUsuario, nome FROM Usuario WHERE idUsuario = ?";
        PreparedStatement pstmt = null;
        ResultSet res = null;
        Usuario usuario = null;

        if (conn != null) {
            try {
                
                pstmt = conn.prepareStatement(query);
                pstmt.setInt(1, idUsuario);
                res = pstmt.executeQuery();

                if (res.next()) {
                    usuario = new Usuario();
                    usuario.setId(res.getInt("idUsuario"));
                    usuario.setNome(res.getString("nome"));
                } 

            } catch (SQLException ex) {
                System.out.println("Erro ao validar usuário: " + ex.getMessage());
            } finally {
                FabricaConexao.fechar(pstmt);
            }
        }

        return usuario;
    }
}
